﻿using System.Collections.Generic;

namespace WeWork.SDK.Framework.Entitys
{
    /// <summary>
    /// 
    /// </summary>
    public class ExternalInfo
    {
        /// <summary>
        /// 外部联系人的userid
        /// </summary>
        public string external_userid { set; get; } = string.Empty;
        /// <summary>
        /// 外部联系人的名称
        /// </summary>
        public string name { set; get; } = string.Empty;
        /// <summary>
        /// 外部联系人的职位，如果外部企业或用户选择隐藏职位，则不返回，仅当联系人类型是企业微信用户时有此字段
        /// </summary>
        public string position { set; get; } = string.Empty;
        /// <summary>
        /// 外部联系人头像，代开发自建应用需要管理员授权才可以获取，第三方不可获取，上游企业不可获取下游企业客户该字段
        /// </summary>
        public string avatar { set; get; } = string.Empty;
        /// <summary>
        /// 外部联系人所在企业的简称，仅当联系人类型是企业微信用户时有此字段
        /// </summary>
        public string corp_name { set; get; } = string.Empty;
        /// <summary>
        /// 外部联系人所在企业的主体名称，仅当联系人类型是企业微信用户时有此字段。仅企业自建应用可获取；第三方应用、代开发应用、上下游应用不可获取，返回内容为企业名称，即corp_name。
        /// </summary>
        public string corp_full_name { set; get; } = string.Empty;
        /// <summary>
        /// 外部联系人的类型，1表示该外部联系人是微信用户，2表示该外部联系人是企业微信用户
        /// </summary>
        public int type { set; get; }
        /// <summary>
        /// 外部联系人性别 0-未知 1-男性 2-女性。第三方不可获取，上游企业不可获取下游企业客户该字段，返回值为0，表示未定义
        /// </summary>
        public int gender { set; get; }
        /// <summary>
        /// 外部联系人在微信开放平台的唯一身份标识（微信unionid），通过此字段企业可将外部联系人与公众号/小程序用户关联起来。仅当联系人类型是微信用户，且企业绑定了微信开发者ID有此字段。查看绑定方法。第三方应用和代开发应用均不可获取，上游企业不可获取下游企业客户的unionid字段
        /// </summary>
        public string unionid { set; get; } = string.Empty;
        /// <summary>
        /// 外部联系人的自定义展示信息，可以有多个字段和多种类型，包括文本，网页和小程序，仅当联系人类型是企业微信用户时有此字段，字段详情见对外属性；
        /// JSON字符串
        /// </summary>
        public ExternalAttr external_profile { set; get; }
    }

    public class ExternalAttr
    {
        public List<IExternalAttrBase> external_attr { set; get; }
    }

    public interface IExternalAttrBase
    {
        /// <summary>
        /// 
        /// </summary>
        int type { set; get; }
        /// <summary>
        /// 
        /// </summary>
        string name { set; get; }
    }

    public class ExternalAttrBase : IExternalAttrBase
    {
        /// <summary>
        /// 
        /// </summary>
        public int type { set; get; }
        /// <summary>
        /// 
        /// </summary>
        public string name { set; get; }
    }
    
    public class ExternalAttrText : ExternalAttrBase
    {
        public ExternalAttrInfoText text { set; get; }
    }

    public class ExternalAttrInfoText
    {
        /// <summary>
        /// 
        /// </summary>
        public string value { set; get; } = string.Empty;
    }
    public class ExternalAttrWeb : ExternalAttrBase
    {
        public ExternalAttrInfoWeb web { set; get; }
    }

    public class ExternalAttrInfoWeb
    {
        /// <summary>
        /// 
        /// </summary>
        public string url { set; get; } = string.Empty;
        /// <summary>
        /// 
        /// </summary>
        public string title { set; get; } = string.Empty;
    }
    public class ExternalAttrMiniprogram : ExternalAttrBase
    {
        public ExternalAttrInfoMiniprogram miniprogram { set; get; }
    }

    public class ExternalAttrInfoMiniprogram
    {
        /// <summary>
        /// 
        /// </summary>
        public string appid { set; get; } = string.Empty;
        /// <summary>
        /// 
        /// </summary>
        public string pagepath { set; get; } = string.Empty;
        /// <summary>
        /// 
        /// </summary>
        public string title { set; get; } = string.Empty;
    }
}
